package excercise;

import java.io.ObjectInputStream.GetField;

public class EX02_OOP {

	// 자릿수 구분 문자 _
	// 정수 리터럴이 너무 길면 가독성에 문제가 있음
	// JDK 7에 새럽게 추가된 기능 주 하나는
	// 3 세릿수마다 _ 를 사용할 수 있게 한 것
	
	// 클래스의 사용되는 변수의 종류
	// 맴버member 변수
	//  -> class 블록내 선언하는 변수
	// 	-> 해당 클래스를 통해서만 사용가능한 변수
	
	// 인스턴스instance/obeject 변수
	//  -> 객체를 가리키는 변수를 의미
	//	-> 클래스와 new 연산자를 사용한 문장의
	//     실행했을때의 결과물
	
	// 생성자constructor
	// 생성자는 객체를 생성하는 데 사용하는 특별한 메서스
	// 모든 클래스는 하나 이상의 생성자가 있어야 함
	// 설령, 메서스를 작성하지 않았더라도
	// 컴파일러가 자동으로 만들어서 넣어줌
	// 생성자는 일반 메서스와는 달리 
	// void 나 return 을 사용하지 않음
	// 생성자 이름은 클래스 이름과 동일해야 함
	
	
	public static void main(String[] args) {
		Retangle a = new Retangle();
			a.width = 4;
			a.height = 40;
			a.color = "red";
			a.gab();
		Retangle b = new Retangle();
			b.width = 3.5F;
			b.height = 35.9F;
			b.color = "orange";
			b.gab();
			
		System.out.println("선풍기");
		Fan c = new Fan();
			c.speed = c.FAST; // 불러올때는 객체를 붙여서 불름
			c.on = true;
			c.radius = 10;
			c.color = "yellow";
			
		Fan d = new Fan();
			d.speed = c.MEDIUM;
			d.radius = 5;
			d.on = false;
			
			//d.color = "blue"; 기본값이 블루기에 지정안해도됨
		
			
		
		Account e = new Account();
		 	e.aid = 1122;
		 	e.balance = 20000;
		 	e.interestRate = 4.5F;
		 	e.dataCreated = "2013-11-06 13:15:45";
		 	e.deposit(3500);
		 	System.out.println(e.balance);
		 	e.withdraw(3500);
		 	System.out.println(e.balance);
		 	System.out.println(e.getMonthlyInterestRate());
		 	
		 System.out.println("Aaa");
		Stock f = new Stock();
			f.sname = "경영 기술";
			f.previosClosingPrice = 75_0000;
			f.currentPrice = 1_500_000;
			f.getChangePercent();
			System.out.println(f.getChangePercent());
			// 요 언더바 인식은 JDK7.0에서만 지원하는 기능임.
			
					
	}//메인

}//클래스

class Retangle {
		float width = 1.0F;
		float height = 1.0F;
		String color = "white";
	
	float getArea(){
		return width * height;
	}
	float getPerimeter(){
		return width * 2 + height*2;
	}
	void gab(){
		System.out.println(width);
		System.out.println(height);
		System.out.println(color);
		this.getArea();
		this.getPerimeter();
	}
}

	class Fan {
		final int SLOW = 1; 
		final int MEDIUM = 2;
		final int FAST = 3;
		int speed = SLOW;
		boolean on = false;
		float radius = 5.0F;
		String color = "blue";
		String msg = "";
	
		
}

class Account {
	int aid = 0;
	int balance = 0;
	float interestRate = 0;
	String dataCreated;
	

	float getMonthlyInterestRate(){
		return interestRate /12;
	}
	int withdraw(int gold){ //특정 메서드에서만 쓸때는 이렇게 ()안에 써둔다.
		
		return balance -= gold;
	}
	// call by value 로 인해 예금 금액이 제대로 차감되지 않음
	
	int deposit(int gold){
		return balance += gold;
	}
	
	}

class Stock{
	String sname;
	int previosClosingPrice;
	int currentPrice;
	int getChangePercent(){
		return (int)((1-((float)currentPrice /previosClosingPrice))*100);
	}
	
}